Rust Enum

rust enum支持将多个类型内置到rust enum variants
string,numeric types,structs甚至enum,同时enum类似struct支持impl block来定义method
与struct不同的事,impl block的方法可以为enum variants共用

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

impl Message {
    fn call(&self) {
        // method body would be defined here
    }
}

let m = Message::Writefrom("hello");
m.call();


Option Enum

Option Enum是一个特殊的enum,主要是用于类似其他语言的null语法,但是相对于null有rust安全的特性

enum Option<T> {
    None,
    Some(T),
}
let some_number = Some(5);
let some_char = Some('e');

let absent_number: Option<i32> = None;

    let x: i8 = 5;
    let y: Option<i8> = Some(5);

    let sum = x + y; // will failed
    

上面可以看到Option<T>和T是不同的type,所以不能直接进行互操作,在操作前你需要主动先获取Option<T>的value在和其他的T进行操作

let x = Some("air");
assert_eq!(x.unwrap(), "air");